package com.dragon.modules.yuegou.enums.code;

import com.dragon.common.constant.enums.IBusinessCode;

import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 停车业务状态码
 * 
 * @author 彭鑫
 *
 */
public enum ParkCode implements IBusinessCode {

	/**
	 * 车牌号已经被绑定
	 */
	PLATE_NO_BIND_EXISTS(17000, "车牌号已经被绑定"),

	/**
	 * 车牌号绑定失败
	 */
	PLATE_NO_BIND_FAILD(17001, "车牌号绑定失败"),

	/**
	 * 车牌号没有被绑定
	 */
	PLATE_NO_UNBIND(17002, "车牌号没有被绑定"),

	/**
	 * 车牌绑定超出限制
	 */
	PLATE_EXCEEDS_LIMIT(17003, "车牌已经超出限制"),

	/**
	 * 车牌找回失败
	 */
	PLATE_RETRIEVE_FAILD(17004, "车牌找回失败"),
	
	/**
	 * 车牌找回失败
	 */
	PLATE_RETRIEVE_IMG_ERROR(17005, "行驶证图片异常"),

	/**
	 * 请求ETCP系统出现token过期异常
	 */
	TOKEN_EXPIRED(17111, "TOKEN已过期"),

	/**
	 * 车牌号解绑失败
	 */
	PLATE_NO_UNBIND_FAILD(17103, "车牌号解绑失败"),

	/**
	 * 停车回调失败，根据订单号未找到停车信息
	 */
	NOTIFY_FAIL_NOT_RECORD(17104, "订单号未找到停车信息"),

	/**
	 * 商圈没有配置停车场
	 */
	PARK_COUPON_RECEIVED(17107, "停车券已被领取"),
	
	/**
	 * 停车费小于0，不需要缴费
	 */
	PARK_FEE_LT_ZERO(17108, "尚未产生停车费，请刷新后再试"),
	
	/**
	 * 车辆还在免费时间内，不需要缴费
	 */
	PARK_IS_FREE_LIMIT_TIME(17109, "车辆还在免费停车时间内，请尽快离场"),
	
	/**
	 * 车辆还在免费时间内，不需要缴费
	 */
	PLATE_NO_NOT_EXIST(17110, "车牌号不存在"),
	
	/**
	 * 未查询到停车信息
	 */
	NO_PARK_INFO(17112, "未查询到停车信息"),

	/**
	 * 停车订单支付时前后端金额不一致
	 */
	PARK_ORDER_FEE_ERROR(17113, "停车金额异常"),
	
	/**
	 * 商圈没有配置停车场
	 */
	PARKING_CANT_BIND_CAR(18001, "车场不允许绑定车牌"),
	
	/**
	 * 停车回调失败，支付通知ETCP系统失败
	 */
	ETCP_ORDER_PAID_FAIL(17201, "支付通知ETCP系统失败"),
	
	/**
	 * 停车回调失败，支付通知ETCP系统失败
	 */
	WY_ORDER_PAID_FAIL(17202, "支付通知无忧系统失败"),
	
	/**
	 * 停车回调失败，支付通知一点通系统失败
	 */
	YDT_ORDER_PAID_FAIL(17203, "支付通知一点通系统失败"),

	/**
	 * 停车回调失败，支付通知ETCP系统失败
	 */
	ETCP_QUERY_FEE_FAIL(17204, "ETCP系统查费失败"),
	
	/**
	 * 停车回调失败，支付通知ETCP系统失败
	 */
	WY_QUERY_FEE_FAIL(17205, "无忧系统查费失败"),
	
	/**
	 * 停车回调失败，支付通知一点通系统失败
	 */
	YDT_QUERY_FEE_FAIL(17206, "一点通系统查费失败"),

	WY_CART_ENTER_FAIL(17207, "无忧系统车辆进场失败"),

	WY_CART_EIIT_FAIL(17208, "无忧系统车辆出场失败"),

	DEFAULTUSE_IS_EMPTY(17209, "券和积分仅用一种，必须选择默认抵扣"),
	/**
	 * 商圈没有配置停车场
	 */
	PARKING_NO_CONFIG(18000, "未配置停车场");

	private final Integer code;

	private final String message;

	private ParkCode(Integer code, String message) {
		this.code = code;
		this.message = message;
	}

	public Integer getCode() {
		return code;
	}

	public String getMessage() {
		return message;
	}

	/**
	 * 把code转化为ResponseCode枚举
	 * 
	 * @param code
	 *            代码
	 * @return
	 */
	public static ParkCode from(Integer code) {
		if (code == null) {
			return null;
		}
		return CODE_MAP.get(code);
	}

	/**
	 * Code Map for ResponseCode
	 */
	private static final Map<Integer, ParkCode> CODE_MAP = Stream.of(ParkCode.values())
			.collect(Collectors.toMap(ParkCode::getCode, e -> e));

}
